﻿using System.Collections.Generic;
using NHibernate;
using Neturion.Dados;
using Neturion.IRepositorios;

namespace Neturion.Repositorios
{
    public class RepositorioReferenciaPessoa : IRepositorioReferenciaPessoa
    {
        public ReferenciaPessoa Inserir(ReferenciaPessoa referenciaPessoa)
        {
            referenciaPessoa.FimVigenciaReferencia = referenciaPessoa.FimVigenciaReferencia.HasValue
                                   ? referenciaPessoa.FimVigenciaReferencia.GetValueOrDefault().Date
                                   : referenciaPessoa.FimVigenciaReferencia;
            referenciaPessoa.InicioVigenciaReferencia = referenciaPessoa.InicioVigenciaReferencia.HasValue
                                        ? referenciaPessoa.InicioVigenciaReferencia.GetValueOrDefault().Date
                                        : referenciaPessoa.InicioVigenciaReferencia;
            
            GerenciadorBDConfigs.Instance.SessaoAtual().Save(referenciaPessoa);
            return referenciaPessoa;
        }

        public ReferenciaPessoa Atualizar(ReferenciaPessoa referenciaPessoa)
        {
            ReferenciaPessoa tmpReferenciaPessoa = ObterPorId(referenciaPessoa.ReferenciaPessoaId);
            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados
            referenciaPessoa.FimVigenciaReferencia = referenciaPessoa.FimVigenciaReferencia.HasValue
                                 ? referenciaPessoa.FimVigenciaReferencia.GetValueOrDefault().Date
                                 : referenciaPessoa.FimVigenciaReferencia;
            referenciaPessoa.InicioVigenciaReferencia = referenciaPessoa.InicioVigenciaReferencia.HasValue
                                        ? referenciaPessoa.InicioVigenciaReferencia.GetValueOrDefault().Date
                                        : referenciaPessoa.InicioVigenciaReferencia;
            tmpReferenciaPessoa.TipoReferenciaPessoa = referenciaPessoa.TipoReferenciaPessoa;
            tmpReferenciaPessoa.PessoaReferenciada = referenciaPessoa.PessoaReferenciada;
            tmpReferenciaPessoa.ObservacaoReferencia = referenciaPessoa.ObservacaoReferencia;
            tmpReferenciaPessoa.NeturionLog = referenciaPessoa.NeturionLog;

            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(tmpReferenciaPessoa);
            return tmpReferenciaPessoa;
        }

        public void Excluir(ReferenciaPessoa referenciaPessoa)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(referenciaPessoa);
        }

        public IList<ReferenciaPessoa> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(ReferenciaPessoa));
            return criteria.List<ReferenciaPessoa>() as List<ReferenciaPessoa>;
        }

        public ReferenciaPessoa ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<ReferenciaPessoa>(id);
        }
    }
}